home *** CD-ROM | disk | FTP | other *** search
/ Otherware / Otherware_1_SB_Development.iso / mac / developm / source / rkeyboar.cpt / Reactive Keyboard ƒ / RK_FILE.C < prev    next >
Encoding:
C/C++ Source or Header  |  1990-07-24  |  2.8 KB  |  125 lines

  1. /* "FILE's" link to rk_button, written by John Darragh, Calgary, revised 3-89
  2.  *
  3.  * these are the main function used by file+rk.c to generate predictions
  4.  */
  5. #include <MacIncludes.h>
  6.  
  7. #include "Rk.h"
  8. #include "Structs.h"
  9. #include "rk_button.h"
  10. #include "FILE+RK.H"
  11.  
  12. int             pred_number = 0;
  13.  
  14. int     pred_number;              
  15.  
  16. extern PrefHandle gStartPrefs,gPrefs;
  17. extern GrafPtr    gPredict;
  18. extern short gContextBar;
  19. /* ED_STRUCT editor_data; */
  20.  
  21. extern char   first[MAX_SET],              /* Defined in rk_button.c */
  22.               ed_context[MAX_CMD_LINE_LENGTH];
  23. extern Buffer Buf, CBuf;
  24. extern char   *prime_file;
  25. extern char   pred_on_display;
  26.  
  27. static char   temp[1024];              /* scratch string buf */
  28.  
  29.  
  30. make_a_prediction (s) char *s; {    /* sets s to the current prediction */
  31.  
  32.     char *a = temp; int length, i;
  33.     
  34.     strcpy (temp, ed_context);
  35.     length = strlen (temp);
  36.     temp[length] = '\0';
  37.     if (length > (*gStartPrefs)->pOrder) a = &temp[length - (*gStartPrefs)->pOrder];
  38.     
  39.     for (i=1; i<=(*gStartPrefs)->pOrder; i++) CBuf[i] = nil;
  40.     while (*a) {
  41.         for (i=(*gStartPrefs)->pOrder; i>0; i--) CBuf[i] = scan_up(CBuf[i-1],*a);
  42.         a++;
  43.     }
  44.     find_first(CBuf);
  45.     build_menu(CBuf, s);
  46. }
  47.  
  48. update_the_model()
  49.     /* adds context into the model*/
  50.  
  51.     char *s = ed_context;
  52.     char *a = s, *c = s; int length, i;
  53.  
  54.     if (strlen(s) < (*gStartPrefs)->pOrder) {
  55.         strcpy (temp, s);
  56.         length = strlen (temp);
  57.         if (length > (*gStartPrefs)->pOrder) a = &temp[length - (*gStartPrefs)->pOrder];
  58.         else a = temp;
  59.     }
  60.     while (*c) {
  61.         for (i=(*gStartPrefs)->pOrder; i>0; i--) Buf[i] = move_up(Buf[i-1],*c);
  62.         c++;
  63.     }
  64. }
  65.  
  66. build_menu(buf,s) Buffer buf; char *s; { /* fill out prediction in s */
  67.  
  68.     int i,j,length; Buffer tbuf; char *bptr = s, c;
  69.     
  70.     length = ((gPredict->portRect.right-gPredict->portRect.left)-gContextBar)/CharWidth(' ')-1;
  71.     if(length==0) length=0;    
  72.  
  73.     c = first[pred_number];
  74.     for (i=0; i<=(*gStartPrefs)->pOrder; i++) tbuf[i] = buf[i];
  75.     for (i=1; i<=length; i++) {
  76.         if (!(!(*gPrefs)->pshowSpecial && (c == '\n') && (i==1)))
  77.             *bptr++ = c;
  78.         if ((*gPrefs)->pstopAtCR && (c == '\n')) goto bp;
  79.         for (j=(*gStartPrefs)->pOrder; j>=1; j--) tbuf[j] = scan_up (tbuf[j-1],c);
  80.         c = first_pred(tbuf);
  81.         }
  82. bp:    *bptr = '\0';
  83. }
  84.  
  85.  
  86. shutdown_() {
  87.     FILE *to;
  88.     if ((to = fopen (prime_file, "a")) != NULL) {
  89.         fputs ("\07", to);  fflush (to);  fclose(to);
  90.     }
  91. }
  92.  
  93. abortit (message, status)
  94. char *message;
  95. int status;
  96. {
  97.     char dbinfo[150];
  98. #pragma unused (status)
  99.     debugstr(message);
  100.     sprintf(dbinfo,"gStartPrefs.pOrder: %d, gStartPrefs.pStartup: %d",(*gStartPrefs)->pOrder,(*gStartPrefs)->pStartup);
  101.     debugstr(dbinfo);
  102.     ExitToShell();
  103. }
  104.  
  105. int 
  106. get_display_length(s)
  107.     char           *s;
  108. {
  109.  
  110.     char           *cptr;
  111.     int             len;
  112.  
  113.     cptr = s;
  114.     len = 0;
  115.     while (*cptr) {
  116.         if ((*cptr < 32) || (*cptr == 127))
  117.             len += 2;
  118.         else
  119.             len++;
  120.         ++cptr;
  121.     }
  122.     return len;
  123. }
  124.